//////////////////////////////////////////////////////////////////////////

#ifndef _DATABASE_H_
#define _DATABASE_H_

//////////////////////////////////////////////////////////////////////////

#include <vector>
#include <QString>
#include <QtSql>

//////////////////////////////////////////////////////////////////////////

class  Patient;

//////////////////////////////////////////////////////////////////////////



/** Class for Database, stores tables with patients and researches
*
*  @author  Anastasia Karpinska
*  @author  Roman Pasechnik
*  @since   Oct 17th, 2009
*  @updated Oct 12th, 2009
*/

class Database
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Constructor */
    Database();


    /** Destructor */
    ~Database();


//////////////////////////////////////////////////////////////////////////


    /** Adds patient to the database */
    void AddPatient(const Patient& _patient);


    /** Deletes patient from the database */
    void DeletePatient(const Patient& _patient);


    /** Update information about patient */
    void UpdatePatient(const Patient& _patient);


    /** Get information about patients by history number */
    void FetchPatients(std::vector<Patient>& _patients, size_t _history) const;


    /** Get information about patients by surname */
    void FetchPatients(std::vector<Patient>& _patients, const QString& _surname) const;


    /** Get information about patients by surname */
    void FetchPatientResearches( Patient& _patient ) const;


    /** Save current research results */
    void SaveCurrentResearch( const Patient& _patient );


//////////////////////////////////////////////////////////////////////////

private:

//////////////////////////////////////////////////////////////////////////

    QSqlDatabase m_DB;
    //QSqlTableModel* m_Model;


//////////////////////////////////////////////////////////////////////////


    /** Iterates selected patients */
    void IteratePatientsTable( QSqlQuery &query, std::vector<Patient> &_patients ) const;


//////////////////////////////////////////////////////////////////////////
};

//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
